var HlValidator = (function(){
  var validateRegExp = {
    // 非空
    isEmpty:function(value,errorMsg){
      if(value == '' || value === null) return errorMsg
    },
    //金额(input的type = ‘number’)
    isAmount:function(value,errorMsg){
      if(value <= 0) return errorMsg
    },
    // 比例
    isScale:function(value,errorMsg){
      if(value < 0 || value > 100) return errorMsg
    },
    // 手机
    isMobile:function(value,errorMsg){
      if ( !/(^1[3|5|7|8][0-9]{9}$)/.test( value ) ) return errorMsg
    },
    // 邮箱
    isEmail:function(value,errorMsg){
      if( !/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(value) ) return errorMsg
    },
    // 省份证
    isIdentityCard:function(value,errorMsg){
      if( !/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)) return errorMsg
    },
    // 邮编
    isZip:function(value,errorMsg){
      if( !/^[1-9][0-9]{5}$/.test(value) ) return errorMsg
    },
    // 数字
    isNumber:function(value,errorMsg){
      if( !/^(-?\d+)(\.\d+)?$/.test(value) ) return errorMsg
    },
    // 正整数(含0)
    //
    isPositiveInteger:function(value,errorMsg){
      if( !/^\d+$/.test(value) ) return errorMsg
    },
    // 负整数（含0）
    isNegativeInteger:function(value,errorMsg){
      if( !/^((-\d+)|(0+))$/.test(value) ) return errorMsg
    },
    // 整数
    isInteger:function(value,errorMsg){
      if( !/^-?\d+$/.test(value) ) return errorMsg
    },
    // 正数
    isPositiveNumber:function(value,errorMsg){
      if( !/^((\d+(\.\d+)?)|(0+(\.[1-9]+)?))$/.test(value) ) return errorMsg
    },
    // 负数
    isNegativeNumber:function(value,errorMsg){
      if( !/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/.test(value) ) return errorMsg
    },
    // 最小长度
    minLength:function(value,length,errorMsg){
      if(value === null) return errorMsg
      if(typeof value == 'string' && value.length < length) return errorMsg
    },
    // 最大长度
    maxLength:function(value,length,errorMsg){
      if(value.length > length) return errorMsg
    }
  }

  function Validator(){
    this._cache = []
  }

  Validator.prototype = {
    // 添加验证规则
    add:function(value,rules){
      var self = this

      for (var i = 0; i < rules.length; i++) {
        (function(rule){
          var strategyAry = rule.rule.split(':')
          var errorMsg = rule.msg

          self._cache.push(function(){
            var strategy = strategyAry.shift()
            strategyAry.unshift(value)
            strategyAry.push(errorMsg)

            return validateRegExp[strategy].apply( value, strategyAry)
          })

        })(rules[i])
      }
    },
    // 开始校验
    start:function(){
      var res = null

      for (var i = 0; i < this._cache.length; i++) {
        var msg = this._cache[i]()
        if( msg ){
          res = msg
          break
        }
      }

      this._cache = []

      if(res){
        return msg
      }else{
        return true
      }
    }
  }

  // class Validator {
  //   constructor(){
  //     this._cache = []
  //   }
  //   // 添加验证规则
  //   add(value,rules){
  //     var self = this
  //
  //     for (var i = 0; i < rules.length; i++) {
  //       (function(rule){
  //         var strategyAry = rule.rule.split(':')
  //         var errorMsg = rule.msg
  //
  //         self._cache.push(function(){
  //           var strategy = strategyAry.shift()
  //           strategyAry.unshift(value)
  //           strategyAry.push(errorMsg)
  //
  //           return validateRegExp[strategy].apply( value, strategyAry)
  //         })
  //
  //       })(rules[i])
  //     }
  //   }
  //
  //   // 开始校验
  //   start(){
  //     var res = null
  //
  //     for (var i = 0; i < this._cache.length; i++) {
  //       var msg = this._cache[i]()
  //       if( msg ){
  //         res = msg
  //         break
  //       }
  //     }
  //
  //     this._cache = []
  //
  //     if(res){
  //       return msg
  //     }else{
  //       return true
  //     }
  //   }
  //
  // }

  return Validator

}())
